package q3;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.LinkedBlockingQueue;

/**
 * 餐馆
 * @author：涂有
 * @date 2017年12月1日 下午5:41:44
 */
public class Restaurant {

	/**表示餐馆拥有的菜*/
	private List<Food> foods = new ArrayList<>();
	/**表示餐馆拥有的厨师*/
	private List<Chef> chefs = new ArrayList<>();
	/**表示餐馆拥有的服务员*/
	private List<Waiter> waiters = new ArrayList<>();
	
	/**等待做的菜品*/
	private LinkedBlockingQueue<Order> newOrders = new LinkedBlockingQueue<>();
	/**做好的菜品，等待服务员送*/
	private LinkedBlockingQueue<Order> finishOrders = new LinkedBlockingQueue<>();
	
	/**
	 * 初始化好餐馆拥有的菜品、厨师、服务员
	 */
	public Restaurant(){
		foods.add(new Food("红烧肉"));
		foods.add(new Food("蚂蚁上树"));
		foods.add(new Food("酸菜鱼"));
		
		chefs.add(new Chef("高级厨师", this));
		chefs.add(new Chef("中级厨师", this));
		
		waiters.add(new Waiter("服务生1", this));
		waiters.add(new Waiter("服务生2", this));
		waiters.add(new Waiter("服务生3", this));
		waiters.add(new Waiter("服务生4", this));
	}
	
	/**
	 * 顾客点餐
	 * @author：涂有
	 * @date 2017年12月2日 下午4:27:49
	 * @param customer 哪个顾客点餐
	 * @param food 点的菜品是什么
	 */
	public void addOrder(Customer customer, Food food){
		Order o = new Order(food, customer);
		newOrders.add(o);
		System.out.format("顾客：%s，开台点菜：%s\n", o.getCustomer().getName(), o.getFood().getName());
	}
	
	/**
	 * 餐馆开始运营
	 * @author：涂有
	 * @date 2017年12月2日 下午5:15:32
	 */
	public void run(){
		
		//厨师线程
		for(int i = 0; i < 2; i++){
			new Thread(chefs.get(i)).start(); //厨师开始工作
		}
		
		//服务员线程
		for(int i = 0; i < 4; i++){
			new Thread(waiters.get(i)).start(); //服务员开始工作
		}
	}

	/**
	 * 返回菜单，以便顾客点选
	 * @author：涂有
	 * @date 2017年12月2日 下午4:25:28
	 * @return
	 */
	public List<Food> getFoods() {
		return foods;
	}

	/**
	 * 得到所有的待做的菜单，一般用于厨师调用
	 * @author：涂有
	 * @date 2017年12月2日 下午4:45:34
	 * @return
	 */
	public LinkedBlockingQueue<Order> getNewOrders() {
		return newOrders;
	}

	/**
	 * 得到所有的做好的菜单，一般用于服务员调用
	 * @author：涂有
	 * @date 2017年12月2日 下午4:46:05
	 */
	public LinkedBlockingQueue<Order> getFinishOrders() {
		return finishOrders;
	}
}
